(function (global, factory, opts) {
    alert("function");

    if (typeof define === "function" && define.amd) {
        // AMD
        define([], factory);
    } else if (typeof exports !== "undefined") {
        // Node, CommonJS之类的
        factory();
    } else {
        // 浏览器全局变量(root 即 window)
        var mod = {
            exports: {}
        };
        global.userDataBrowse = factory();
    }
})(this, function () {
    "use strict";

    /**
     * 字面量创建对象，不会调用 Object构造函数, 简洁且性能更好;
     new Object() 方式创建对象本质上是方法调用，涉及到在proto链中遍历该方法，
     当找到该方法后，又会生产方法调用必须的 堆栈信息，方法调用结束后，
     还要释放该堆栈，性能不如字面量的方式。
     通过对象字面量定义对象时，不会调用Object构造函数。

     */

    /*
    字面量定义方式
    var   GsdeUserDataBrowse={}
    */

    /**
     * 原型方式创建对象
     * @param opts
     * @constructor
     */
    function GsdeUserDataBrowse(opts) {

        this.options = opts;
    }

    GsdeUserDataBrowse.prototype.f = function () {
        alert(JSON.stringify(this.options));
        opts["ddd"] = 30;
        return this;
    }
    //对象函数
    GsdeUserDataBrowse.prototype.showMsg = function () {
        alert(JSON.stringify(this.options));
        return this;
        //alert(JSON.stringify(opts));
    }

    GsdeUserDataBrowse.prototype.setOptions = function (opts) {
        this.options = opts;
    }
    //$.extend(GsdeUserDataBrowse.prototype, showMsg, f);
    // GsdeUserDataBrowse.prototype.showMsg = showMsg;
    // GsdeUserDataBrowse.prototype.f = f;

    //创建对象
    GsdeUserDataBrowse.create = function (opts) {
        return new GsdeUserDataBrowse(opts);
    }
    if (typeof module !== 'undefined') {
        module.exports = GsdeUserDataBrowse;
    }

    return GsdeUserDataBrowse;
});